Memory management methods
The following methods can be called to utilize Replicate's memory management procedures.
create_pool
Creates a new memory pool.
Syntax
create_pool (AR_AO_MPOOL *parentPool, char *poolName, AR_AO_MPOOL **newPool);
Parameter | Type | Description |
---|---|---|
parentPool |
AR_AO_MPOOL |
The pool to allocate from (required). |
poolName |
char |
The new memory pool name (optional). Information note
The poolName value is assumed to be a static, unmanaged space that does not need to be freed. The value will not be copied internally. |
newPool |
AR_AO_MPOOL |
Returns the new memory pool. |
destroy_pool
Deletes the given pool and deallocates the memory associated with it.
Using the clear_pool
method (described below) will provide much better performance than using the destroy_pool
and create_pool
methods.
Syntax
destroy_pool (AR_AO_MPOOL *Pool);
Parameter | Type | Description |
---|---|---|
Pool |
AR_AO_MPOOL |
The pool to destroy. |
clear_pool
Deallocates the memory associated with a given pool.
Syntax
clear_pool (AR_AO_MPOOL *pool);
Parameter | Type | Description |
---|---|---|
pool |
AR_AO_MPOOL |
The pool to deallocate. |
calloc
Performs the following operations:
-
Allocates memory from a given pool
Information noteDifferent pools can be used to allocate memory on multiple threads concurrently. However, it's not thread safe to do this on the same pool.
- Allocates a buffer and sets all bytes to zero
- Aborts a process if no memory remains
Syntax
calloc (AR_AO_MPOOL *pool, size_t *size );
Parameter | Type | Description |
---|---|---|
pool |
AR_AO_MPOOL |
The pool to allocate memory from. |
size |
size_t |
The size of the buffer to allocate. |
get_ctx_pool
Returns the ctx (context) thread pool (and creates a new pool if needed). Using ctx pool per thread minimizes the chances of a crash as each addon will have its own pool allocator. The pool will be destroyed automatically if a thread already exists.
Syntax
get_ctx_pool (char *addonName, AR_AO_MPOOL *pool );
Parameter | Type | Description |
---|---|---|
addonName |
char |
The pool name if one needs to be created (optional). |
pool |
AR_AO_MPOOL |
The ctx pool that the function returns. |
get_ctx
Gets the metadata from the thread pool.
Syntax
get_ctx_pool (AR_AO_MPOOL *pool, char *key, void **data );
Parameter | Type | Description |
---|---|---|
pool |
AR_AO_MPOOL |
The ctx pool to get the metadata from. |
key |
char |
The key for the metadata to retrieve. |
data |
void |
The user metadata associated with the pool(returned). |
set_ctx
Sets metadata on the thread pool.
The data to be attached to the pool should have a life span at least as long as the pool to which it is being attached.
Syntax
set_ctx (AR_AO_MPOOL *pool, char *key, void *data, AR_ADDONS_MEM_CTX_CLEANUP cleanup );
Parameter | Type | Description |
---|---|---|
pool |
AR_AO_MPOOL |
The ctx pool. |
key |
char |
The key for the metadata to retrieve. |
data |
void |
The user metadata to be associated with the pool. |
cleanup |
AR_ADDONS_MEM_CTX_CLEANUP |
Cleans the data when pool is destroyed. Returns "0" on success. |